//=========================================================================
//  SE5 Empire Setup - Default Moderate - Captain Kwok's Balance Mod v125+
//=========================================================================
//
// Balance Mod Changes
// -------------------
// v1.25 Changed - Updated technology selections for v1.25 updates
// v1.20 Changed - Updated technology selections for v1.20 updates
// v1.19 Changed - Optimized starting technology selections
// v1.07 Changed - Divided default AI into Aggressive, Defensive, and Moderate
//       Changed - New scheme for selected racial traits
// v0.99 Changed - Updated starting weapon selection
// v0.93 Changed - Updated racial trait selection
//       Changed - Updated starting tech selection

#include Script_AI_GlobalResearch.txt

//------------------------------------------------------------------------
// Global Constants
//------------------------------------------------------------------------

//------------------------------------------------------------------------
// Global Variables
//------------------------------------------------------------------------

//------------------------------------------------------------------------
// Forward Declarations
//------------------------------------------------------------------------

//------------------------------------------------------------------------
// Main
//------------------------------------------------------------------------
function Main returns boolean
vars
  racial_pts:                long
  research_pts:              long
begin

  // Get our racial trait and starting research points
  set racial_pts := Sys_AI_Setup_Get_Racial_Points_Remaining(sys_long_Player_ID)
  set research_pts := Sys_AI_Setup_Get_Research_Points_Remaining(sys_long_Player_ID)

  // Default setup preferences
  set bool_Race_Uses_Mines                                 := TRUE
  set bool_Race_Uses_Fighters                              := TRUE
  set bool_Race_Uses_Satellites                            := TRUE
  set bool_Race_Uses_Troops                                := TRUE
  set bool_Race_Uses_Weapon_Platforms                      := TRUE
  set bool_Race_Uses_Drones                                := TRUE
  set bool_Race_Uses_Kamikaze_Ships                        := FALSE
  set bool_Race_Uses_Boarding_Ships                        := FALSE
  set bool_Race_Uses_Bombardment_Ships                     := FALSE
  set bool_Race_Uses_Normal_Armor                          := TRUE
  set bool_Race_Uses_Normal_Shields                        := TRUE
  set bool_Race_Uses_Cloaking_Devices                      := FALSE
  set bool_Race_Uses_Master_Computers                      := TRUE

  set bool_Race_Uses_Engine_Overloading_Weapons            := TRUE
  set bool_Race_Uses_Shield_Damaging_Weapons               := TRUE

  // Debug output
  call Sys_Debug_Print("Setup", "------------------------")
  call Sys_Debug_Print("Setup", "Racial Trait Selections:")
  call Sys_Debug_Print("Setup", "  - Starting Points = " + Sys_Convert_Long_To_String(racial_pts))

  // AI Assist
  if Sys_Are_We_Computer_Player(sys_long_Player_ID) then
    call Add_Racial_Trait("AI Assist") // 0
  endif

  // Default Racial Traits
  case Sys_Get_Random_Long(1, 4)
    1:
      // Construction Focus
      // 2000 Pts
      call Add_Racial_Trait("Mining Aptitude") // 500
      call Add_Racial_Trait("Builders") // 500
      call Add_Racial_Trait("Hardy Industrialists") // 1,000
      // 3000 Pts
      call Add_Racial_Trait("High Reproduction") // 500
      call Add_Racial_Trait("Naturally Happy") // 500
      // 5000 Pts
      call Add_Racial_Trait("Natural Merchants") // 1,000
      call Add_Racial_Trait("Environmental Resistance") // 500
      call Add_Racial_Trait("Refining Aptitude") // 500
    2:
      // Ship Focus
      // 2000 Pts
      call Add_Racial_Trait("Propulsion Experts") // 1,000
      call Add_Racial_Trait("Advanced Power Conservation") // 1,000
      // 3000 Pts
      call Add_Racial_Trait("Smart") // 500
      call Add_Racial_Trait("Builders") // 500
      // 5000 Pts
      call Add_Racial_Trait("Hardy Industrialists") // 1,000
      call Add_Racial_Trait("Farming Ineptness") // -500
      call Add_Racial_Trait("Ancient Race") // 1,500
    3:
      // Economic Focus
      // 2000 Pts
      call Add_Racial_Trait("Mining Aptitude") // 500
      call Add_Racial_Trait("Farming Aptitude") // 500
      call Add_Racial_Trait("Refining Aptitude") // 500
      call Add_Racial_Trait("High Reproduction") // 500
      // 3000 Pts
      call Add_Racial_Trait("Natural Merchants") // 1,000
      call Add_Racial_Trait("Naturally Happy") // 500
      call Add_Racial_Trait("Builders") // 500
      // 5000 Pts
      call Add_Racial_Trait("Advanced Power Conservation") // 1,000
      call Add_Racial_Trait("Foolish") // -500
      call Add_Racial_Trait("Ancient Race") // 1,500
    4:
      // Racial Trait Focus
      // 2000 Pts
      case (Sys_Get_Random_Long(1, 6))
        1:
          if Add_Racial_Trait("Crystallurgy") then // 2,000
            set bool_Race_Uses_Crystalline_Tech := TRUE
            set bool_Race_Uses_Crystalline_Weapons := TRUE
          endif
        2:
          if Add_Racial_Trait("Interdimensional Knowledge") then // 1,500
            set bool_Race_Uses_Interdimensional_Tech := TRUE
            set bool_Race_Uses_Interdimensional_Weapons := TRUE
            call Add_Racial_Trait("Refining Aptitude") // 500
          endif
        3:
          if Add_Racial_Trait("Organic Manipulation") then // 2,000
            set bool_Race_Uses_Organic_Tech := TRUE
            set bool_Race_Uses_Organic_Weapons := TRUE
          endif
        4:
          if Add_Racial_Trait("Psychic") then // 1,000
            set bool_Race_Uses_Psychic_Tech := TRUE
            set bool_Race_Uses_Psychic_Weapons := TRUE
            call Add_Racial_Trait("Lucky") // 500
          endif
        5:
          if Add_Racial_Trait("Deeply Religous") then // 1,500
            set bool_Race_Uses_Religious_Tech := TRUE
            call Add_Racial_Trait("Brave") // 500
          endif
        6:
          if Add_Racial_Trait("Temporal Knowledge") then // 1,500
            set bool_Race_Uses_Temporal_Tech := TRUE
            set bool_Race_Uses_Temporal_Weapons := TRUE
            call Add_Racial_Trait("Refining Aptitude") // 500
          endif
      endcase
      // 3000 Pts
      // Crystalline Races
      if (bool_Race_Uses_Crystalline_Tech) then
        call Add_Racial_Trait("Refining Aptitude") // 500
        call Add_Racial_Trait("Environmental Resistance") // 500
      else
        // Organic Races
        if (bool_Race_Uses_Organic_Tech) then
          call Add_Racial_Trait("Farming Aptitude") // 500
          call Add_Racial_Trait("Brave") // 500
        else
          // Others
          case (Sys_Get_Random_Long(1, 4))
            1:
              call Add_Racial_Trait("Advanced Power Conservation") // 1,000
            2:
              call Add_Racial_Trait("Natural Merchants") // 1,000
            3:
              call Add_Racial_Trait("Propulsion Experts") // 1,000
            4:
              call Add_Racial_Trait("Hardy Industrialists") // 1,000
          endcase
        endif
      endif
      // 5000 Pts
      case (Sys_Get_Random_Long(1, 4))
        1:
          call Add_Racial_Trait("Advanced Storage Techniques") // 2,000
        2:
          call Add_Racial_Trait("Ancient Race") // 1,500
        3:
          call Add_Racial_Trait("Emotionless") // 1,000
        4:
          call Add_Racial_Trait("Advanced Storage Techniques") // 2,000
      endcase
      case (Sys_Get_Random_Long(1, 4))
        1:
          call Add_Racial_Trait("Smart") // 500
        2:
          call Add_Racial_Trait("Builders") // 500
        3:
          call Add_Racial_Trait("Mining Aptitude") // 500
        4:
          call Add_Racial_Trait("Cunning") // 500
      endcase
      case (Sys_Get_Random_Long(1, 4))
        1:
          call Add_Racial_Trait("Naturally Happy") // 500
        2:
          call Add_Racial_Trait("High Reproduction") // 500
        3:
          call Add_Racial_Trait("Environmental Resistance") // 500
        4:
          call Add_Racial_Trait("Physical Strength") // 500
      endcase
  endcase

  // Are we using a racial technology area?
  set bool_Race_Uses_Racial_Tech := (bool_Race_Uses_Crystalline_Weapons or bool_Race_Uses_Interdimensional_Weapons or bool_Race_Uses_Organic_Weapons or bool_Race_Uses_Psychic_Weapons or bool_Race_Uses_Temporal_Weapons)

  // Default Weapon Preferences
  if not (bool_Race_Uses_Racial_Tech) then
    // Regular weapons
    case Sys_Get_Random_Long(1, 5)
      1:
        set bool_Race_Uses_Projectile_Weapons                    := TRUE
        set bool_Race_Uses_Focused_Energy_Weapons                := TRUE
        set bool_Race_Uses_Missile_Weapons                       := TRUE
      2:
        set bool_Race_Uses_Energy_Stream_Weapons                 := TRUE
        set bool_Race_Uses_Phased_Energy_Weapons                 := TRUE
        set bool_Race_Uses_Torpedo_Weapons                       := TRUE
      3:
        set bool_Race_Uses_Energy_Pulse_Weapons                  := TRUE
        set bool_Race_Uses_Plasma_Missile_Weapons                := TRUE
        set bool_Race_Uses_High_Energy_Discharge_Weapons         := TRUE
      4:
        set bool_Race_Uses_Energy_Stream_Weapons                 := TRUE
        set bool_Race_Uses_Plasma_Missile_Weapons                := TRUE
        set bool_Race_Uses_High_Energy_Discharge_Weapons         := TRUE
      5:
        set bool_Race_Uses_Energy_Pulse_Weapons                  := TRUE
        set bool_Race_Uses_Phased_Energy_Weapons                 := TRUE
        set bool_Race_Uses_Torpedo_Weapons                       := TRUE
    endcase
    // Speciality Weapons
    case Sys_Get_Random_Long(1, 3)
      1:
        set bool_Race_Uses_Shield_Damaging_Weapons               := TRUE
      2:
        set bool_Race_Uses_Engine_Overloading_Weapons            := TRUE
      3:
        set bool_Race_Uses_Weapon_Overloading_Weapons            := TRUE
    endcase
  endif

  // Debug output
  call Sys_Debug_Print("Setup", "----------------------")
  call Sys_Debug_Print("Setup", "Technology Selections:")
  call Sys_Debug_Print("Setup", "  - Starting Points = " + Sys_Convert_Long_To_String(research_pts))

  // Default starting technologies

  // Low Tech Start (5,000 Default)
  if (research_pts > 0) and (research_pts <= 5000) then
    call Add_Tech_Area("Sensors", 3, TRUE, FALSE) // 5,000
  endif

  // Default medium tech start (50,000 Default; 25,000 = High Cost; 100,000 = Low Cost)
  if (research_pts > 5000) and (research_pts <= 100000) then
    call Add_Tech_Area("Physics", 2, TRUE, FALSE) // 12,000
    // Sub-Total 12,000 (12,000)
    call Add_Tech_Area("Repair", 1, TRUE, FALSE) // 1,000
    call Add_Tech_Area("Sensors", 4, TRUE, FALSE) // 9,000
    // Sub-Total 10,000 (22,000)
    call Add_Tech_Area("Projectile Weapons", 2, bool_Race_Uses_Projectile_Weapons, FALSE) // 2,000
    call Add_Tech_Area("Focused-Energy Weapons", 2, bool_Race_Uses_Focused_Energy_Weapons, FALSE) // 2,000
    call Add_Tech_Area("Energy Stream Weapons", 1, bool_Race_Uses_Energy_Stream_Weapons, FALSE) // 3,000
    call Add_Tech_Area("Energy Pulse Weapons", 1, bool_Race_Uses_Energy_Pulse_Weapons, FALSE) // 3,000
    // Alternate weapons for racial area techs
    call Add_Tech_Area("Crystalline Weapons", 2, bool_Race_Uses_Crystalline_Weapons, FALSE) // 6,000
    call Add_Tech_Area("Interdimensional Weapons", 2, bool_Race_Uses_Interdimensional_Weapons, FALSE) // 6,000
    call Add_Tech_Area("Organic Weapons", 2, bool_Race_Uses_Organic_Weapons, FALSE) // 6,000
    call Add_Tech_Area("Psychic Weapons", 2, bool_Race_Uses_Psychic_Weapons, FALSE) // 6,000
    call Add_Tech_Area("Temporal Weapons", 2, bool_Race_Uses_Temporal_Weapons, FALSE) // 6,000
    // Sub-Total 2,000; 6,000 (25,000; 24,000)
    call Add_Tech_Area("Small Ship Construction", 2, TRUE, FALSE) // 6,000
    call Add_Tech_Area("Armor", 3, TRUE, FALSE) // 5,000
    call Add_Tech_Area("Ion Engines", 3, TRUE, FALSE) // 10,000
    call Add_Tech_Area("Shields", 1, TRUE, FALSE) // 2,000
    call Add_Tech_Area("Stellar Harnessing", 1, TRUE, FALSE) // 2,000
    // Sub-Total 25,000 (50,000; 49,000)
    call Add_Tech_Area("Crystalline Technology", 2, bool_Race_Uses_Crystalline_Tech, FALSE) // 6,000
    call Add_Tech_Area("Interdimensional Technology", 2, bool_Race_Uses_Interdimensional_Tech, FALSE) // 6,000
    call Add_Tech_Area("Organic Technology", 2, bool_Race_Uses_Organic_Tech, FALSE) // 8,000
    call Add_Tech_Area("Psychic Technology", 2, bool_Race_Uses_Psychic_Tech, FALSE) // 6,000
    call Add_Tech_Area("Temporal Technology", 2, bool_Race_Uses_Temporal_Tech, FALSE) // 6,000
    // To even out costs for differences in racial area tech costs
    call Add_Tech_Area("Radioactives Extraction", 2, bool_Race_Uses_Crystalline_Tech or bool_Race_Uses_Interdimensional_Tech or bool_Race_Uses_Temporal_Tech, FALSE) // 6,000
    call Add_Tech_Area("Organics Extraction", 2, bool_Race_Uses_Organic_Tech or bool_Race_Uses_Psychic_Tech, FALSE) // 4,000
    // Alternate spending for non-racial technologies
    call Add_Tech_Area("Projectile Weapons", 4, bool_Race_Uses_Projectile_Weapons, FALSE) // 4,000
    call Add_Tech_Area("Focused-Energy Weapons", 3, bool_Race_Uses_Focused_Energy_Weapons, FALSE) // 3,000
    call Add_Tech_Area("Missile Weapons", 3, bool_Race_Uses_Missile_Weapons, FALSE) // 5,000
    call Add_Tech_Area("Energy Stream Weapons", 2, bool_Race_Uses_Energy_Stream_Weapons, FALSE) // 6,000
    call Add_Tech_Area("Energy Pulse Weapons", 2, bool_Race_Uses_Energy_Pulse_Weapons, FALSE) // 6,000
    call Add_Tech_Area("Point-Defense Weapons", 3, bool_Race_Uses_Energy_Stream_Weapons or bool_Race_Uses_Energy_Pulse_Weapons, FALSE) // 6,000
    // Sub-Total 12,000 (62,000; 61,000)
    call Add_Tech_Area("Military Science", 2, TRUE, FALSE) // 10,000
    // Sub-Total 10,000 (72,000; 71,000)
    call Add_Tech_Area("Sensors", 4, TRUE, FALSE) // 4,000
    call Add_Tech_Area("Defense Systems", 3, TRUE, FALSE) // 12,000
    call Add_Tech_Area("Contra-Terrene Engines", 1, TRUE, FALSE) // 4,000
    call Add_Tech_Area("Space Yards", 2, TRUE, FALSE) // 8,000
    // Sub-Total 28,000 (100,000; 99,000)
  endif

  // Default high tech start (500,000 Default; 250,000 = High Cost; 1,000,000 = Low Cost)
  if (research_pts > 100000) then
    call Add_Tech_Area("Rock Planet Colonization", 1, TRUE, FALSE) // 50,000
    call Add_Tech_Area("Gas Giant Colonization", 1, TRUE, FALSE) // 50,000
    call Add_Tech_Area("Ice Planet Colonization", 1, TRUE, FALSE) // 50,000
    // Sub-Total 100,000 (100,000)
    call Add_Tech_Area("Chemistry", 2, TRUE, FALSE) // 12,000
    call Add_Tech_Area("Physics", 3, TRUE, FALSE) // 30,000
    call Add_Tech_Area("Military Science", 3, TRUE, FALSE) // 25,000
    // Sub-Total 67,000 (167,000)
    call Add_Tech_Area("Small Ship Construction", 6, TRUE, FALSE) // 60,000
    call Add_Tech_Area("Medium Ship Construction", 1, TRUE, FALSE) // 5,000
    call Add_Tech_Area("Mines", 1, TRUE, FALSE) // 4,000
    call Add_Tech_Area("Sensors", 3, TRUE, FALSE) // 5,000
    call Add_Tech_Area("Defense Systems", 1, TRUE, FALSE) // 2,000
    call Add_Tech_Area("Shields", 1, TRUE, FALSE) // 2,000
    call Add_Tech_Area("Armor", 3, TRUE, FALSE) // 5,000
    // Sub-Total 83,000 (250,000)

    // Random racial technologies
    call Add_Tech_Area("Crystalline Technology", 3, bool_Race_Uses_Crystalline_Tech, FALSE) // 15,000
    call Add_Tech_Area("Interdimensional Technology", 3, bool_Race_Uses_Interdimensional_Tech, FALSE) // 15,000
    call Add_Tech_Area("Organic Technology", 3, bool_Race_Uses_Organic_Tech, FALSE) // 20,000
    call Add_Tech_Area("Psychic Technology", 3, bool_Race_Uses_Psychic_Tech, FALSE) // 15,000
    call Add_Tech_Area("Temporal Technology", 3, bool_Race_Uses_Temporal_Tech, FALSE) // 15,000
    // To even out costs for differences in racial area tech costs
    call Add_Tech_Area("Radioactives Extraction", 3, bool_Race_Uses_Crystalline_Tech or bool_Race_Uses_Interdimensional_Tech or bool_Race_Uses_Temporal_Tech, FALSE) // 15,000
    call Add_Tech_Area("Organics Extraction", 3, bool_Race_Uses_Organic_Tech or bool_Race_Uses_Psychic_Tech, FALSE) // 10,000
    // Sub-Total 30,000 (280,000)

   // Temp
   // Random racial weapons
    call Add_Tech_Area("Crystalline Weapons", 3, bool_Race_Uses_Crystalline_Weapons, FALSE) // 15,000
    call Add_Tech_Area("Interdimensional Weapons", 3, bool_Race_Uses_Interdimensional_Weapons, FALSE) // 15,000
    call Add_Tech_Area("Organic Weapons", 3, bool_Race_Uses_Organic_Weapons, FALSE) // 15,000
    call Add_Tech_Area("Psychic Weapons", 3, bool_Race_Uses_Psychic_Weapons, FALSE) // 15,000
    call Add_Tech_Area("Temporal Weapons", 3, bool_Race_Uses_Temporal_Weapons, FALSE) // 15,000
    // Random non-racial weapons
    call Add_Tech_Area("Projectile Weapons", 6, bool_Race_Uses_Projectile_Weapons, FALSE) // 20,000
    call Add_Tech_Area("Focused-Energy Weapons", 6, bool_Race_Uses_Focused_Energy_Weapons, FALSE) // 20,000
    call Add_Tech_Area("Energy Stream Weapons", 3, bool_Race_Uses_Energy_Stream_Weapons, FALSE) // 18,000
    call Add_Tech_Area("Energy Pulse Weapons", 3, bool_Race_Uses_Energy_Pulse_Weapons, FALSE) // 18,000
    call Add_Tech_Area("High-Energy Discharge Weapons", 4, bool_Race_Uses_High_Energy_Discharge_Weapons, FALSE) // 20,000
    call Add_Tech_Area("Phased-Energy Weapons", 4, bool_Race_Uses_Phased_Energy_Weapons, FALSE) // 20,000
    call Add_Tech_Area("Missile Weapons", 6, bool_Race_Uses_Missile_Weapons, FALSE) // 2,000
    call Add_Tech_Area("Plasma Missile Weapons", 3, bool_Race_Uses_Plasma_Missile_Weapons, FALSE) // 24,000
    call Add_Tech_Area("Torpedo Weapons", 6, bool_Race_Uses_Torpedo_Weapons, FALSE) // 21,000
    call Add_Tech_Area("Point-Defense Weapons", 3, TRUE, FALSE) // 10,000
    call Add_Tech_Area("Shield Damaging Weapons", 3, bool_Race_Uses_Shield_Damaging_Weapons, FALSE) // 6,000
    call Add_Tech_Area("Engine Overloading Weapons", 1, bool_Race_Uses_Engine_Overloading_Weapons, FALSE) // 12,000
    call Add_Tech_Area("Weapon Overloading Weapons", 1, bool_Race_Uses_Weapon_Overloading_Weapons, FALSE) // 9,000
    call Add_Tech_Area("Troop Weapons", 5, TRUE, FALSE) // 7,000
    call Add_Tech_Area("Smaller Weapons", 3, TRUE, FALSE) // 5,000
  endif

  // If there are setup points remaining, spend them
  if (Sys_AI_Setup_Get_Research_Points_Remaining(sys_long_Player_ID) > 1000) then
    call AI_Research_Selection()
  endif

  return TRUE
end

//------------------------------------------------------------------------